package com.guang.lock.condition;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.concurrent.TimeUnit;

/**
 * @Description 使用syncronzied关键字演示
 *              问题：因为Tom大佬，没有调休，睡眠了五秒钟。但是因为持有了锁，导致其他的线程无法操作，所以
 *                   应该在Tom睡觉的时候将锁释放掉，让其他开发来干
 * @Author liguang
 * @Date 2022/10/20/19:13
 */
public class SyncronizedConditionTest {

    private final static Logger logger = LoggerFactory.getLogger(SyncronizedConditionTest.class);

    // lock对象
    private static Object lock = new Object();
    // 加班是否有假可调休
    static boolean haveVocation = false;

    public static void main(String[] args) {

        // tom是高级开发。无所不能，无所不会
        Thread tom = new Thread(() -> {
            workUp();
        }, "tom");
        tom.start();

        for (int i = 0; i < 10; i++) {
            new Thread(() -> {
                workUp();
            }, "normal").start();
        }


    }

    public static void workUp(){
        synchronized (lock){
            if (Thread.currentThread().getName().equals("tom")){
                if (!haveVocation){
                    logger.info("当前加班没有调休，那么tom先睡5S中看看");
                    try {
                        TimeUnit.SECONDS.sleep(5);
                        logger.info("Tom大佬醒了，来看看是否可以了");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                logger.info("Tom大佬开始写代码");
            }else {
                logger.info("Tom在休息的时候不干，我们普通程序员来干");
            }

        }
    }

}
